package com.sky.service.impl;

import com.sky.context.BaseContext;
import com.sky.dto.ShoppingCartDTO;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.entity.ShoppingCart;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.mapper.ShoppingCartMapper;
import com.sky.service.ShoppingCartService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
@Slf4j
public class ShoppingCartServiceImpl implements ShoppingCartService {


    @Autowired
    private ShoppingCartMapper shoppingCartMapper;


    @Autowired
    private DishMapper dishMapper;

    @Autowired
    private SetmealMapper setmealMapper;

    /**
     * 添加购物车
     * @param shoppingCartDTO
     */
    @Override
    public void addShoppingCart(ShoppingCartDTO shoppingCartDTO) {



        //1.判断当前购物车中的商品是否存在
        ShoppingCart shoppingCart = new ShoppingCart();
        BeanUtils.copyProperties(shoppingCartDTO,shoppingCart);
        Long userId = BaseContext.getCurrentId();
        shoppingCart.setUserId(userId);

        List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);

        //2，如果存在，则商品的数量加1
          if(list!=null&& list.size()>0){
              shoppingCart = list.get(0);
              shoppingCart.setNumber(shoppingCart.getNumber()+1);
              shoppingCartMapper.updateById(shoppingCart);
          }else {
              //3.如果不存在，则插入一条购物车的数据

              //判断本次添加到购物车的是菜品还是套餐
              Long dishId = shoppingCartDTO.getDishId();
              Long setmealId = shoppingCartDTO.getSetmealId();

              if(dishId!=null){
                  //本次添加的菜品
                  Dish dish = dishMapper.findById(dishId);

                  //设置菜品名称
                  shoppingCart.setName(dish.getName());

                  //设置菜品价格
                  shoppingCart.setAmount(dish.getPrice());

                  //设置菜品图片
                  shoppingCart.setImage(dish.getImage());

              }else {
                  //本次添加的是套餐
                  Setmeal setmeal = setmealMapper.getById(setmealId);

                  //设置套餐名称
                  shoppingCart.setName(setmeal.getName());

                  //设置套餐价格
                  shoppingCart.setAmount(setmeal.getPrice());

                  //设置套餐图片
                  shoppingCart.setImage(setmeal.getImage());


              }
                  //设置菜品数量
                  shoppingCart.setNumber(1);

                  //设置购物车创建时间
                  shoppingCart.setCreateTime(LocalDateTime.now());

                  //插入新的购物车数据
                 shoppingCartMapper.insert(shoppingCart);
          }

    }

    /**
     * 查看购物车
     * @return
     */
    @Override
    public List<ShoppingCart> showShoppingCart() {
        //获取当前用户id
        Long userId = BaseContext.getCurrentId();
        ShoppingCart shoppingCart = ShoppingCart.builder()
                .userId(userId).build();
        return shoppingCartMapper.list(shoppingCart);
    }


    /**
     * 清空购物车
     */
    @Override
    public void cleanShoppingCart() {
        Long userId = BaseContext.getCurrentId();
        shoppingCartMapper.delteByUserId(userId);
    }

    @Override
    public void subShoppingCart(ShoppingCartDTO shoppingCartDTO) {

        ShoppingCart shoppingCart = new ShoppingCart();
        BeanUtils.copyProperties(shoppingCartDTO,shoppingCart);

        //获取当前用户id
        Long userId = BaseContext.getCurrentId();
        shoppingCart.setUserId(userId);

        //查询登录用户的购物车数据
        List<ShoppingCart> list = shoppingCartMapper.list(shoppingCart);

        if(list!=null&&list.size()>0){
            shoppingCart = list.get(0);
            Integer number = shoppingCart.getNumber();
            if(number==1){
                shoppingCartMapper.delteByUserId(userId);
            }else {
                shoppingCart.setNumber(number-1);
                shoppingCartMapper.updateById(shoppingCart);
            }

        }
    }
}
